import axios, { AxiosInstance, AxiosResponse } from 'axios'
import storage from '@/utils/storage'

// 创建axios实例
const instance: AxiosInstance = axios.create({
  baseURL: 'http://localhost:3000', // 根据您的后端API地址配置
  timeout: 5000 // 设置请求超时时间
})

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 在请求发送之前可以进行一些操作，例如添加请求头、请求参数的处理
    const token = storage.getItem<string>('token')
    if (token) {
      config.headers['Authorization'] = 'Bearer ' + token
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    // response的结构是 {status,data,message}
    // 根据status是否是 ‘success'，进行成功判断
    if (response.data?.status === 'success') {
      return response.data.data
    } else {
      // alert()
      return Promise.reject(response.data.message)
    }
  },
  (error) => {
    // 错误处理，例如处理HTTP错误状态码
    if (error.response) {
      console.error(
        'HTTP Error:',
        error.response.status,
        error.response.statusText
      )
    } else if (error.request) {
      console.error('Request Error:', error.message)
    } else {
      console.error('Error:', error.message)
    }
    return Promise.reject(error)
  }
)

// GET请求封装
// export async function get<T>(
//   url: string,
//   params?: Record<string, any>
// ): Promise<T> {
//   try {
//     const response: AxiosResponse<T> = await instance.get(url, { params })
//     return response.data
//   } catch (error) {
//     throw error
//   }
// }

// // POST请求封装
// export async function post<T>(
//   url: string,
//   data?: Record<string, any>
// ): Promise<T> {
//   try {
//     const response: AxiosResponse<T> = await instance.post(url, data)
//     return response.data
//   } catch (error) {
//     throw error
//   }
// }

// // PUT请求封装
// export async function put<T>(
//   url: string,
//   data?: Record<string, any>
// ): Promise<T> {
//   try {
//     const response: AxiosResponse<T> = await instance.put(url, data)
//     return response.data
//   } catch (error) {
//     throw error
//   }
// }

// // DELETE请求封装
// export async function remove<T>(url: string): Promise<T> {
//   try {
//     const response: AxiosResponse<T> = await instance.delete(url)
//     return response.data
//   } catch (error) {
//     throw error
//   }
// }

export default instance
